// API请求工具类
const BASE_URL = 'http://localhost:3000/api'

// 请求封装
const request = (options) => {
  return new Promise((resolve, reject) => {
    const token = wx.getStorageSync('token')

    wx.request({
      url: `${BASE_URL}${options.url}`,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        'Authorization': token ? `Bearer ${token}` : '',
        ...options.header
      },
      success: (res) => {
        if (res.statusCode === 200) {
          if (res.data.code === 200) {
            resolve(res.data.data)
          } else {
            wx.showToast({
              title: res.data.message || '请求失败',
              icon: 'none'
            })
            reject(res.data)
          }
        } else if (res.statusCode === 401) {
          // token过期，清除本地存储并跳转到登录页
          wx.removeStorageSync('token')
          wx.removeStorageSync('userInfo')
          wx.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none'
          })
          reject(res)
        } else {
          wx.showToast({
            title: '网络错误',
            icon: 'none'
          })
          reject(res)
        }
      },
      fail: (err) => {
        wx.showToast({
          title: '请求失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

// API方法
const api = {
  // 用户相关
  user: {
    // 获取用户信息
    getInfo: () => request({
      url: '/user/info',
      method: 'GET'
    }),

    // 更新用户信息
    updateInfo: (data) => request({
      url: '/user/info',
      method: 'PUT',
      data
    }),

    // 修改密码
    changePassword: (data) => request({
      url: '/user/change-password',
      method: 'POST',
      data
    })
  },

  // 小程序相关
  miniprogram: {
    // 登录
    login: (data) => request({
      url: '/miniprogram/login',
      method: 'POST',
      data
    }),

    // 获取配置
    getConfig: () => request({
      url: '/miniprogram/config',
      method: 'GET'
    })
  },

  // 系统相关
  system: {
    // 获取系统配置
    getConfig: () => request({
      url: '/system/config',
      method: 'GET'
    }),

    // 获取版本信息
    getVersion: () => request({
      url: '/system/version',
      method: 'GET'
    })
  }
}

module.exports = {
  request,
  api
}
